package com.indsvr.service;

import com.google.gson.Gson;
import com.indsvr.entity.xunlei.XunLeiDeviceId;
import com.indsvr.utils.XunleiOkHttpUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Service
public class XunleiService {

    @Value("${indsvr.xunlei.url}")
    private String xunleiUrl;

    @Value("${indsvr.xunlei.device_space}")
    private String deviceSpace;

    private String device_id;

    public XunleiOkHttpUtils initHttp() throws Exception{
        XunleiOkHttpUtils xunleiOkHttpUtils = new XunleiOkHttpUtils();
        xunleiOkHttpUtils.setBaseUrl(xunleiUrl);
        xunleiOkHttpUtils.setDeviceSpace(deviceSpace);
        getToken(xunleiOkHttpUtils);
        getDevice_id(xunleiOkHttpUtils);
        return xunleiOkHttpUtils;
    }
    //获取设备ID
    public String getDevice_id(XunleiOkHttpUtils xunleiOkHttpUtils) throws Exception {
        if (device_id!=null) {
            xunleiOkHttpUtils.setDeviceId(device_id);
            return device_id;
        }
        String info_watch = "/device/info/watch";
        String bodyExecute = xunleiOkHttpUtils.execute(info_watch, null,new HashMap<>());

        XunLeiDeviceId xunLeiDeviceId = new Gson().fromJson(bodyExecute, XunLeiDeviceId.class);
        device_id=xunLeiDeviceId.getTarget();
        xunleiOkHttpUtils.setDeviceId(device_id);
        return device_id;
    }
    //请求唯一
    private void getToken(XunleiOkHttpUtils xunleiOkHttpUtils) throws IOException {
        String bodyExecute = xunleiOkHttpUtils.execute( "/", null,null);
        // 匹配规则
        String zz = "(?<=return \").*?(?=\" })";
        Pattern r = Pattern.compile(zz);
        Matcher m = r.matcher(bodyExecute);
        if (m.find()) {
            String token = m.group();
            xunleiOkHttpUtils.setToken(token);
            return;
        }
        throw new RuntimeException("迅雷token获取失败");
    }

}
